// json-server --watch --host 192.168.3.49 --port 3001 jsonp/index.json // 开启jsonp-serve服务器
// json-server --watch --host 127.0.0.1 --port 3001 jsonp/index.json // 开启jsonp-serve服务器
// 导出一个axios的实例  而且这个实例要有请求拦截器 响应拦截器

import store from '@/store'
import router from '@/router'
import { getTimeOfToken } from '@/utils/auth'
import axios from 'axios'
import { Message } from 'element-ui'

const TimeOut = 3600 // 设置token过期的时间

const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API,
  timeout: 5000
}) // 创建一个axios的实例

service.interceptors.request.use(
  config => {
    // 判断是否有token
    if (store.getters.token) {
      if (isExpired()) {
        // 删除本地缓存和token
        store.dispatch('user/logout')
        // 过期
        router.push('/login')
        // 抛出错误
        return Promise.reject(new Error('token超时了token超时了'))
      }
      config.headers.Authorization = `Bearer ${store.getters.token}`
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
) // 请求拦截器
service.interceptors.response.use(
  response => {
    // 结构出数据
    const { data, status, statusText } = response
    if (status === 200) {
      // 说明数据返回成功
      if (data.length !== 0) {
        // 返回的长度需要保证大于0， 不然就是没有收据
        return data
      }
      // 因为jsonp的数据没有页有返回
      // Message.error('数据不存在， 请确认')
      // return Promise.reject(new Error('数据不存在， 请确认'))
    } else {
      Message.error(statusText)
      return Promise.reject(new Error(statusText))
    }
  },
  error => {
    Message.error(error.message)
    return Promise.reject(error)
  }
) // 响应拦截器

/**
 * 前端判断token是否过期
 */
function isExpired() {
  return (Date.now() - getTimeOfToken()) / 1000 > TimeOut
}

export default service // 导出axios实例
